Spring Boot এ Resilience4j Integration

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) Circuit Breaker Pattern এবং Resilience4j Integration |
109
109

Resilience4j হল একটি লাইটওয়েট ফ্রেমওয়ার্ক যা স্প্রিং বুট অ্যাপ্লিকেশনে ফল্ট টলারেন্স (fault tolerance) যোগ করার জন্য ব্যবহার করা হয়। এটি মাইক্রোসার্ভিস বা ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশনে সার্ভিস ব্যর্থতা থেকে রক্ষা করার জন্য কার্যকর। Resilience4j প্রধানত Circuit Breaker, Retry, Rate Limiter, Bulkhead, এবং Time Limiter সমর্থন করে।

নিচে Spring Boot-এ Resilience4j ইন্টিগ্রেশনের একটি উদাহরণ দেখানো হলো:


১. প্রজেক্ট তৈরি করুন

Spring Initializr ব্যবহার করে একটি নতুন স্প্রিং বুট প্রজেক্ট তৈরি করুন। নিচের ডিপেনডেন্সি যুক্ত করুন:

  • Spring Web
  • Resilience4j

২. pom.xml ডিপেনডেন্সি যুক্ত করুন

<dependencies>
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-spring-boot2</artifactId>
        <version>1.7.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

৩. application.properties কনফিগারেশন

# Circuit Breaker কনফিগারেশন
resilience4j.circuitbreaker.instances.myService.failure-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.slow-call-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.slow-call-duration-threshold=2s
resilience4j.circuitbreaker.instances.myService.minimum-number-of-calls=5
resilience4j.circuitbreaker.instances.myService.sliding-window-size=10
resilience4j.circuitbreaker.instances.myService.sliding-window-type=COUNT_BASED
resilience4j.circuitbreaker.instances.myService.wait-duration-in-open-state=10s

# Retry কনফিগারেশন
resilience4j.retry.instances.myService.max-attempts=3
resilience4j.retry.instances.myService.wait-duration=2s

৪. API ক্লায়েন্ট তৈরি করুন

import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ApiClient {

    private final RestTemplate restTemplate;

    public ApiClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String fetchData(String url) {
        return restTemplate.getForObject(url, String.class);
    }
}

৫. Resilience4j Circuit Breaker যুক্ত করুন

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import io.github.resilience4j.retry.annotation.Retry;
import org.springframework.stereotype.Service;

@Service
public class ResilientApiClient {

    private final ApiClient apiClient;

    public ResilientApiClient(ApiClient apiClient) {
        this.apiClient = apiClient;
    }

    @CircuitBreaker(name = "myService", fallbackMethod = "fallbackFetchData")
    @Retry(name = "myService")
    public String fetchDataWithResilience(String url) {
        return apiClient.fetchData(url);
    }

    // ফallback method
    public String fallbackFetchData(String url, Throwable throwable) {
        return "Fallback response due to: " + throwable.getMessage();
    }
}

৬. Controller ক্লাস তৈরি করুন

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    private final ResilientApiClient resilientApiClient;

    public ApiController(ResilientApiClient resilientApiClient) {
        this.resilientApiClient = resilientApiClient;
    }

    @GetMapping("/fetch-data")
    public String fetchData() {
        String url = "https://jsonplaceholder.typicode.com/posts/1"; // উদাহরণ URL
        return resilientApiClient.fetchDataWithResilience(url);
    }
}

৭. Resilience4j এর বৈশিষ্ট্যসমূহ

১. Circuit Breaker:

  • এটি যখন সার্ভিসে বারবার ব্যর্থতা ঘটে তখন সার্ভিসকে সাময়িকভাবে বন্ধ করে দেয়।
  • @CircuitBreaker ব্যবহার করে নির্ধারণ করা হয়।

২. Retry:

  • এটি একটি নির্দিষ্ট সংখ্যক সময় একই রিকোয়েস্ট পুনরায় চেষ্টা করে।
  • @Retry ব্যবহার করা হয়।

৩. Fallback Method:

  • সার্ভিস ব্যর্থ হলে এটি ব্যাকআপ বা ডিফল্ট রেসপন্স সরবরাহ করে।
  • fallbackMethod প্যারামিটার ব্যবহার করা হয়।

৮. লগ আউটপুট উদাহরণ

সফল API কল:

INFO  - CircuitBreaker 'myService' in CLOSED state.
INFO  - API Response: {userId: 1, id: 1, title: "...", body: "..."}

সার্ভিস ব্যর্থ হলে (Fallback):

INFO  - CircuitBreaker 'myService' in OPEN state.
INFO  - Fallback response due to: I/O error on GET request

৯. Spring Boot Actuator (অপশনাল)

Resilience4j Actuator ব্যবহার করলে Circuit Breaker এর মেট্রিক্স দেখতে পারবেন। pom.xml-এ নিচের ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

এবং application.properties ফাইলে Actuator সক্রিয় করুন:

management.endpoints.web.exposure.include=*

Endpoint:
http://localhost:8080/actuator/circuitbreakers


Resilience4j এর সুবিধা:

  1. Fault Tolerance: সিস্টেমকে ব্যর্থতা থেকে সুরক্ষা প্রদান করে।
  2. Customizable Policies: কনফিগারেশন ফাইলে পলিসি নির্ধারণ করা যায়।
  3. Spring Integration: স্প্রিং বুট অ্যাপ্লিকেশনের সাথে সহজ ইন্টিগ্রেশন।
  4. Actuator Support: সার্ভিসের মেট্রিক্স মনিটরিং।

Resilience4j হল Spring Boot অ্যাপ্লিকেশনে উচ্চমানের রেজিলিয়েন্স ফ্রেমওয়ার্ক। এটি Hystrix এর বিকল্প এবং বর্তমান সময়ে ব্যবহারযোগ্য একটি উন্নত টুল।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion